package com.mchat.friend.service;

import com.mchat.friend.domain.dto.FriendRequestDTO;
import com.mchat.friend.domain.dto.FriendReplyDTO;
import com.mchat.friend.domain.dto.FriendDescribeDTO;
import com.mchat.friend.domain.vo.FriendRequestVO;
import com.mchat.friend.domain.vo.FriendVO;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public interface IFriendService {
    /**
     * 给好友添加备注和分组
     */
    Mono<Long> setFriend(FriendDescribeDTO dto);

    /**
     * 获取好友
     */
    Flux<FriendVO> getFriend(long id);
    /**
     * 获取好友申请，包括发出未同意的和收到的等待同意的
     */
    Flux<FriendRequestVO>getFriendApply(long id);
    /**
     * 删除好友关系
     * @return 根据状态码2xx表示成功
     */
    Mono<Long> deleteFriend(long uid,long friendId);

    /**
     * 接受或拒绝好友申请
     * @param dto
     * @return 2xx代表成功，4XX,5XX代表执行失败
     */
    Mono<Long> reply(FriendReplyDTO dto);

    /**
     * 发送好友申请
     * @return  2xx代表成功，4XX,5XX代表执行失败
     */
    Mono<FriendRequestVO> apply(FriendRequestDTO dto);
}
